As network technology has advanced, it is more and more common for users to interact with applications hosted remotely from their local computer. So-called cloud-based or server-based applications serve to reduce the system requirements imposed on client computers while also providing centralized access to hosted data. However, due to the complexity of hosting applications remotely, it is common for application servers to have intermediate web servers that manage communications with the back-end application servers. These web servers may serve requests for a variety of different applications hosted across one or more application servers.
The use of such web servers may be constrained based on the resources available to the web server. Constraints on available network bandwidth, processing power, storage, or system memory may result in certain access limitations being imposed on users. These constraints may limit the number of simultaneous users, sessions, or processes used to communicate with the application servers. Furthermore, remote access software may limit the number of instances, processes, or licensed users based on licensing agreements between the author of the remote access software and the administrators of the web server.
In cases where access to a back-end server is constrained by a set of communication resources, if too many processes or users attempt to communicate with the application servers via the web server, access for one or more of those processes or users may fail due to the web server having insufficient resources to service the request. In cases where an application hosted on an application server fails, client computers may remain connected with the web server, but unable to complete the task for which they connected to the application server. Requests for the failed application may continue to be received by the web server. Although these requests may be associated with a timeout value, the timeout value may result in requests taking longer to fail than new requests are received, resulting in limited communication resources being allocated more quickly than they are released. Eventually, the entire pool of resources may be reserved for requests associated with the failed application, resulting in an inability to service requests for other, functional applications that the web server would otherwise process. Detecting a failure on the back-end application server and sending a notification to an administrative user or service does not solve this problem, as it requires a user to manually take action to correct the error or restart the hanging process. Until this manual action takes place, the incoming requests will continue to hang. Even in the case where back-end processes provide status information, it may not be clear if there is an actual error or if other factors are preventing status information from being received (e.g., network load, slow retrieval of large data files, etc.). In such a case, an error may not be returned until the request times out. If requests continue to be received faster than they can time out, the requests may overwhelm the available communicate resources and render web server unusable. Through applied effort, ingenuity, and innovation, Applicant has solved many of these identified problems by developing a solution that is embodied by the present invention, which is described in detail below